package core

// SourceCreator 是一个函数类型，用作具体 Source 实现的构造器。
// 工厂（factory）使用它来实例化所需的数据源。
type SourceCreator func() Source

// Source 是 ETL 管道的起点。
// 它定义了如何从外部系统（如数据库、文件、消息队列）读取数据，
// 并将每条数据包装成通用的 `Record` 类型，供下游处理。
type Source interface {
	// Open 根据传入的配置准备数据源以供读取。
	// 这通常包括建立网络连接、打开文件句柄等。
	// `config` 的具体内容由每个 Source 实现自行定义。
	Open(config map[string]interface{}) error

	// Read 逐条读取数据。
	// 当所有数据都读取完毕时，必须返回 `io.EOF` 错误来向管道发出信号。
	// 任何其他错误都将被视为管道执行失败。
	Read() (Record, error)

	// Close 用于释放 `Open` 方法获取的所有资源，如关闭数据库连接或文件。
	// 无论管道成功还是失败，它都应该被调用。
	Close() error
}
